package dao.xml;

import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import model.Adresse;
import model.Anlage;
import model.Teilnehmer;
import model.Termin;
import model.Terminplaner;
import model.Termin.TerminArt;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class TerminSAXdao extends DefaultHandler{
	
	private SAXParser parser;
	private Terminplaner termine;
	private Termin termin;
	
	public TerminSAXdao() throws ParserConfigurationException, SAXException{
	 SAXParserFactory factory = SAXParserFactory.newInstance();
	 parser = factory.newSAXParser();
		
		
	}
	
	public Terminplaner getTermine(InputStream stream ) throws SAXException, IOException
	{if(stream == null)
		throw new IllegalArgumentException("Stream darf nicht null sein!");
		
	  parser.parse(stream, this);
	  return termine;
		
		
	}
	

	  
	  public void startDocument() throws SAXException {
	    termine = new Terminplaner();
	  }
	  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

		   SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");  
		  
		  if ("termin".equalsIgnoreCase(qName)) {
	        	String thema = attributes.getValue("thema");
	        	String beschreibung = attributes.getValue("beschreibung");
	        	
	 
	        	    Date terminAnfang;
	        	    Date terminEnde;
			  try {
						terminAnfang = sdf.parse(attributes.getValue("terminanfang"));
						 terminEnde = sdf.parse(attributes.getValue("terminende"));
					} catch (ParseException e) {
						throw new SAXException("Ungueltiges Datum bei einzulesender Datei");
					}
					

	        	TerminArt terminArt = TerminArt.getTerminArt(attributes.getValue("terminart"));
	        	Integer prioritaet = Integer.valueOf(attributes.getValue("prioritaet"));
	        	
	          termin = new Termin(thema, beschreibung, terminAnfang, terminEnde, terminArt, prioritaet, new Adresse("1","1","1","1"));
	          termine.addTermin(termin);
		  }
		  if ("adresse".equalsIgnoreCase(qName)) {
			  String ort = attributes.getValue("ort");
			  String plz = attributes.getValue("plz");
			  String strasse = attributes.getValue("strasse");
			  String land = attributes.getValue("land");
			  
			  Adresse adresse = new Adresse(ort, plz, strasse, land);
			  termin.setAdresse(adresse);
		  }
		   if("teilnehmer".equalsIgnoreCase(qName))
		   {String vorname = attributes.getValue("vorname");
		    String nachname = attributes.getValue("nachname");
		    String anrede = attributes.getValue("anrede");
		    
		    Teilnehmer teilnehmer = new Teilnehmer(vorname, nachname, anrede);
			termin.addTeilnehmer(teilnehmer);
			   
		   }
		   if("anlage".equalsIgnoreCase(qName))
		   {String beschreibung = attributes.getValue("beschreibung");
		    String pfad = attributes.getValue("pfad");
		    Date timestamp;
			try {
				timestamp = sdf.parse(attributes.getValue("timestamp"));
			} catch (ParseException e) {
				throw new SAXException("Ungueltiges Datum bei einzulesender Datei-(Anlage)");
			}
		    
		    Anlage anlage = new Anlage(beschreibung, pfad, timestamp);
			termin.addAnlage(anlage);
			   
		   }		   
		  }
	  
	  
	  }

	  


